package com.liu.concurrent.Synchronized;

/**
 * @author liubo
 */
public class SynchronizedExample {
    private Object lock = new Object();

    /**
     * 修饰实例方法1, 锁作用域是this
     */
    public synchronized void SyncMethod1() {

    }

    /**
     * 修饰实例方法2,锁作用域是this.lock
     */
    public void SyncMethod2() {
        synchronized (this.lock) {
        }
    }

    /**
     * 修饰实例方法3, 锁作用域是this对象
     */
    public synchronized void SyncMethod3() {
        synchronized (this) {
        }
    }

    /**
     * 修饰静态方法, 锁作用域是整个class
     */
    public static synchronized void SyncMethod4() {

    }

    /**
     * 修饰代码块
     */
    public void SyncMethod5() {
        // 代码逻辑
        synchronized (this.lock) {
            //同步代码块
        }
        // 代码逻辑
    }
}